package com.yunkeji.common.enums.app;

import com.yunkeji.common.exception.AppServiceException;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;
import java.util.Optional;

/**
 * 用户状态
 *
 * @author yunkeji
 */
@Getter
@AllArgsConstructor
public enum AppUserOnlineStatus {
    // 以下为普通状态
    离线(0),
    忙碌(1),
    空闲(2);

    //    // 以下为通话状态
    //    D_发起通话(4), // 主叫发起通话
    //    E_正在振铃(5), // 被叫开始振铃
    //    F_准备接听(6), // 被叫响铃后点击接听,此时发请求到后台准备开始通话
    //    G_确认接听(7), // 接收到准备接听的请求后,主叫的状态变更为确认接听
    //    H_正在通话(8), // 一问一答后开始通话
    //    J_主叫挂断(9), // 主叫主动挂断
    //    K_被叫挂断(10), // 被叫主动挂断
    //    L_异常挂断(11), // 断网/断线.断进程挂断
    //    M_欠费挂断(12), // 通话欠费系统挂断
    //    N_通话超时(13), // 振铃无人接听
    //    O_电话忙碌(14), // 主叫呼出的同时,该主叫有可能成为其他主叫的被叫,而该主叫的被叫也有可能成为主叫或者其他主叫的被叫,当这些状态存在其一.称为电话忙碌
    //    p_系统挂断(15), // 系统踢出聊天
    //    Q_状态异常(-1); // 异常状态
    private final Integer code;

    public static AppUserOnlineStatus getByCode(Integer code) {
        AppUserOnlineStatus[] values = AppUserOnlineStatus.values();
        Optional<AppUserOnlineStatus> first =
                Arrays.stream(values).filter(item -> item.getCode().equals(code)).findFirst();
        if (first.isPresent()) {
            return first.get();
        } else {
            throw AppServiceException.paramException("用户状态参数异常");
        }
    }
}
